package com.zd.mybatispluscodegenerator.util;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.sql.Types;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;


/**
 * @author ZhangDong
 * @date 2023/12/1 15:11
 */
public class MybatisPlusCodeGeneratorUtil {

    public static void main(String[] args) {
        String url = "jdbc:mysql://172.19.1.150:3306/temperature?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false";
        String username = "root";
        String password = "Gov123456!";
        // 作者姓名
        String name = "zhangdong";
        // 待生成数据库中的表`
        List<String> tables = Arrays.asList("product_basic", "product_basic_change");


        FastAutoGenerator.create(url, username, password).globalConfig(builder -> {
            builder.author(name) // 设置作者
//                            .enableSwagger() // 开启 swagger 模式
                    .fileOverride() // 覆盖已生成文件
                    .outputDir(System.getProperty("user.dir") + "/src/main/java"); // 指定输出目录
        }).dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
            int typeCode = metaInfo.getJdbcType().TYPE_CODE;
            if (typeCode == Types.SMALLINT) {
                // 自定义类型转换
                return DbColumnType.INTEGER;
            }
            return typeRegistry.getColumnType(metaInfo);

        })).packageConfig(builder -> {
            builder.parent("com.zd.mybatispluscodegenerator") // 设置父包名
                    .entity("pojo.entity") // 设置entity的路径
                    .mapper("dao")//设置mapper的路径
//                            .moduleName("chengyi") // 设置父包模块名
                    .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/dao")); // 设置mapperXml生成路径
        }).strategyConfig(builder -> {
            builder.addInclude(tables) // 设置需要生成的表名
                    .addTablePrefix("t_", "c_") // 设置过滤表前缀
                    .entityBuilder().enableLombok() // 开启lombok
                    .serviceBuilder().formatServiceFileName("%sService"); // 格式化生成Service.java文件，相当于把I过滤了
        }).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
